Add GtkFileChooserSettings for the dialog's geometry
authorFederico Mena Quintero <federico@novell.com>
Wed, 14 Jan 2009 20:18:23 +0000 (20:18 +0000)
committerFederico Mena Quintero <federico@src.gnome.org>
Wed, 14 Jan 2009 20:18:23 +0000 (20:18 +0000)
2009-01-14  Federico Mena Quintero  <federico@novell.com>

    Remember the file chooser's geometry across invocations.

    * gtk/gtkfilechoosersettings.h (struct _GtkFileChooserSettings):
    New fields geometry_x, geometry_y, geometry_width, geometry_height.
    (_gtk_file_chooser_settings_get_geometry): New prototype.
    (_gtk_file_chooser_settings_set_geometry): New prototype.

    * gtk/gtkfilechoosersettings.c (GEOMETRY_X_KEY, GEOMETRY_Y_KEY,
    GEOMETRY_WIDTH_KEY, GEOMETRY_HEIGTH_KEY): New key names.
    (ensure_settings_read): Read the geometry keys.
    (_gtk_file_chooser_settings_save): Save the geometry keys.
    (_gtk_file_chooser_settings_init): Initialize the geometry keys to
    "don't have this value".
    (_gtk_file_chooser_settings_get_geometry): New public function.
    (_gtk_file_chooser_settings_set_geometry): New public function.

Signed-off-by: Federico Mena Quintero <federico@novell.com>
svn path=/trunk/; revision=22116

ChangeLog
gtk/gtkfilechoosersettings.c
gtk/gtkfilechoosersettings.h

index 56db91fba136069ed50ebdd2969dbf5676b80851..743949a3bfb26cea0e57d49117d7f776527d718a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,21 @@
+2009-01-14  Federico Mena Quintero  <federico@novell.com>
+
+       Remember the file chooser's geometry across invocations.
+
+       * gtk/gtkfilechoosersettings.h (struct _GtkFileChooserSettings):
+       New fields geometry_x, geometry_y, geometry_width, geometry_height.
+       (_gtk_file_chooser_settings_get_geometry): New prototype.
+       (_gtk_file_chooser_settings_set_geometry): New prototype.
+
+       * gtk/gtkfilechoosersettings.c (GEOMETRY_X_KEY, GEOMETRY_Y_KEY,
+       GEOMETRY_WIDTH_KEY, GEOMETRY_HEIGTH_KEY): New key names.
+       (ensure_settings_read): Read the geometry keys.
+       (_gtk_file_chooser_settings_save): Save the geometry keys.
+       (_gtk_file_chooser_settings_init): Initialize the geometry keys to
+       "don't have this value".
+       (_gtk_file_chooser_settings_get_geometry): New public function.
+       (_gtk_file_chooser_settings_set_geometry): New public function.
+
 2009-01-13  Matthias Clasen  <mclasen@redhat.com>
 
        Bug 450716 – New API to change global IM
index 4c4e6e7d0c991c46e47a46ae37be3a79620c8912..fe3543d2c41a2af42677c09047abf7b60edf2ca2 100644 (file)
 #define SHOW_HIDDEN_KEY                "ShowHidden"
 #define EXPAND_FOLDERS_KEY     "ExpandFolders"
 #define SHOW_SIZE_COLUMN_KEY    "ShowSizeColumn"
+#define GEOMETRY_X_KEY         "GeometryX"
+#define GEOMETRY_Y_KEY         "GeometryY"
+#define GEOMETRY_WIDTH_KEY     "GeometryWidth"
+#define GEOMETRY_HEIGHT_KEY    "GeometryHeight"
 
 #define MODE_PATH_BAR          "path-bar"
 #define MODE_FILENAME_ENTRY    "filename-entry"
@@ -76,6 +80,24 @@ warn_if_invalid_key_and_clear_error (const gchar  *key,
     }
 }
 
+static void
+get_int_key (GKeyFile *key_file, const char *group, const char *key, int *out_value)
+{
+  GError *error;
+  int val;
+
+  error = NULL;
+  val = g_key_file_get_integer (key_file, group, key, &error);
+
+  if (val == 0 && error != NULL)
+    {
+      *out_value = -1;
+      g_error_free (error);
+    }
+  else
+    *out_value = val;
+}
+
 static void
 ensure_settings_read (GtkFileChooserSettings *settings)
 {
@@ -143,6 +165,11 @@ ensure_settings_read (GtkFileChooserSettings *settings)
   else
     settings->show_size_column = value != FALSE;
 
+  get_int_key (key_file, SETTINGS_GROUP, GEOMETRY_X_KEY, &settings->geometry_x);
+  get_int_key (key_file, SETTINGS_GROUP, GEOMETRY_Y_KEY, &settings->geometry_y);
+  get_int_key (key_file, SETTINGS_GROUP, GEOMETRY_WIDTH_KEY, &settings->geometry_width);
+  get_int_key (key_file, SETTINGS_GROUP, GEOMETRY_HEIGHT_KEY, &settings->geometry_height);
+
  out:
 
   g_key_file_free (key_file);
@@ -165,6 +192,10 @@ _gtk_file_chooser_settings_init (GtkFileChooserSettings *settings)
   settings->show_hidden = FALSE;
   settings->expand_folders = FALSE;
   settings->show_size_column = FALSE;
+  settings->geometry_x     = -1;
+  settings->geometry_y     = -1;
+  settings->geometry_width  = -1;
+  settings->geometry_height = -1;
 }
 
 GtkFileChooserSettings *
@@ -229,6 +260,34 @@ _gtk_file_chooser_settings_set_expand_folders (GtkFileChooserSettings *settings,
   settings->expand_folders = expand_folders != FALSE;
 }
 
+void
+_gtk_file_chooser_settings_get_geometry (GtkFileChooserSettings *settings,
+                                        int                    *out_x,
+                                        int                    *out_y,
+                                        int                    *out_width,
+                                        int                    *out_height)
+{
+  ensure_settings_read (settings);
+
+  *out_x      = settings->geometry_x;
+  *out_y      = settings->geometry_y;
+  *out_width  = settings->geometry_width;
+  *out_height = settings->geometry_height;
+}
+
+void
+_gtk_file_chooser_settings_set_geometry (GtkFileChooserSettings *settings,
+                                        int                     x,
+                                        int                     y,
+                                        int                     width,
+                                        int                     height)
+{
+  settings->geometry_x     = x;
+  settings->geometry_y     = y;
+  settings->geometry_width  = width;
+  settings->geometry_height = height;
+}
+
 gboolean
 _gtk_file_chooser_settings_save (GtkFileChooserSettings *settings,
                                 GError                **error)
@@ -271,6 +330,14 @@ _gtk_file_chooser_settings_save (GtkFileChooserSettings *settings,
                          EXPAND_FOLDERS_KEY, settings->expand_folders);
   g_key_file_set_boolean (key_file, SETTINGS_GROUP,
                          SHOW_SIZE_COLUMN_KEY, settings->show_size_column);
+  g_key_file_set_integer (key_file, SETTINGS_GROUP,
+                         GEOMETRY_X_KEY, settings->geometry_x);
+  g_key_file_set_integer (key_file, SETTINGS_GROUP,
+                         GEOMETRY_Y_KEY, settings->geometry_y);
+  g_key_file_set_integer (key_file, SETTINGS_GROUP,
+                         GEOMETRY_WIDTH_KEY, settings->geometry_width);
+  g_key_file_set_integer (key_file, SETTINGS_GROUP,
+                         GEOMETRY_HEIGHT_KEY, settings->geometry_height);
 
   contents = g_key_file_to_data (key_file, &len, error);
   g_key_file_free (key_file);
index e8eda963d94793a7b51459b9f6708bbe2e1f36a1..1bc45aa2538f9a907085c0634dd7860010422aed 100644 (file)
@@ -38,6 +38,11 @@ struct _GtkFileChooserSettings
 
   LocationMode location_mode;
 
+  int geometry_x;
+  int geometry_y;
+  int geometry_width;
+  int geometry_height;
+
   guint settings_read    : 1;
   guint show_hidden      : 1;
   guint show_size_column : 1;
@@ -69,6 +74,17 @@ gboolean _gtk_file_chooser_settings_get_show_size_column (GtkFileChooserSettings
 void     _gtk_file_chooser_settings_set_show_size_column (GtkFileChooserSettings *settings,
                                                           gboolean                show_column);
 
+void _gtk_file_chooser_settings_get_geometry (GtkFileChooserSettings *settings,
+                                             int                    *out_x,
+                                             int                    *out_y,
+                                             int                    *out_width,
+                                             int                    *out_heigth);
+void _gtk_file_chooser_settings_set_geometry (GtkFileChooserSettings *settings,
+                                             int                     x,
+                                             int                     y,
+                                             int                     width,
+                                             int                     heigth);
+
 gboolean _gtk_file_chooser_settings_save (GtkFileChooserSettings *settings,
                                          GError                **error);